<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Finding Exact Values | Elasticsearch: The Definitive Guide [2.x] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch: The Definitive Guide [2.x]">
<link rel="up" href="structured-search.html" title="Structured Search">
<link rel="prev" href="structured-search.html" title="Structured Search">
<link rel="next" href="combining-filters.html" title="Combining Filters">
<meta name="DC.type" content="Learn/Docs/Legacy/Elasticsearch/Definitive Guide/2.x">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="2.x">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<p>
  <strong>WARNING</strong>: The 2.x versions of Elasticsearch have passed their
  <a href="https://www.elastic.co/support/eol">EOL dates</a>. If you are running
  a 2.x version, we strongly advise you to upgrade.
</p>
<p>
  This documentation is no longer maintained and may be removed. For the latest
  information, see the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html">current
  Elasticsearch documentation</a>.
</p>
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: The Definitive Guide [2.x]</a></span>
»
<span class="breadcrumb-link"><a href="search-in-depth.html">Search in Depth</a></span>
»
<span class="breadcrumb-link"><a href="structured-search.html">Structured Search</a></span>
»
<span class="breadcrumb-node">Finding Exact Values</span>
</div>
<div class="navheader">
<span class="prev">
<a href="structured-search.html">« Structured Search</a>
</span>
<span class="next">
<a href="combining-filters.html">Combining Filters »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_finding_exact_values"></a>Finding Exact Values<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/080_Structured_Search/05_term.asciidoc">edit</a>
</h2>
</div></div></div>
<p>When working with exact values,
you will be working with non-scoring, filtering queries. Filters are
important because they are very fast.  They do not calculate
relevance (avoiding the entire scoring phase) and are easily cached. We’ll
talk about the performance benefits of filters later in <a class="xref" href="filter-caching.html" title="All About Caching">All About Caching</a>,
but for now, just keep in mind that you should use filtering queries as often as you
can.</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_term_query_with_numbers"></a>term Query with Numbers<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/080_Structured_Search/05_term.asciidoc">edit</a>
</h3>
</div></div></div>
<p>We are going to explore the <code class="literal">term</code> query

first because you will use it often. This query is capable of handling numbers,
booleans, dates, and text.</p>
<p>We’ll start by indexing some documents representing products, each having a
 <code class="literal">price</code> and <code class="literal">productID</code>:</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">POST /my_store/products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10, "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20, "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30, "productID" : "QQPX-R-3956-#aD8" }</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_number.json"></div>
<p>Our goal is to find all products with a certain price.  You may be familiar
with SQL if you are coming from a relational database background.  If we
expressed this query as an SQL query, it would look like this:</p>
<div class="pre_wrapper lang-sql">
<pre class="programlisting prettyprint lang-sql">SELECT document
FROM   products
WHERE  price = 20</pre>
</div>
<p>In the Elasticsearch query DSL, we use a <code class="literal">term</code> query to accomplish the same
thing.  The <code class="literal">term</code> query will look for the exact value that we specify.  By
itself, a <code class="literal">term</code> query is simple. It accepts a field name and the value
that we wish to find:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
    "term" : {
        "price" : 20
    }
}</pre>
</div>
<p>Usually, when looking for an exact value, we don’t want to score the query.  We just
want to include/exclude documents, so we will use a <code class="literal">constant_score</code> query to execute
the <code class="literal">term</code> query in a non-scoring mode and apply a uniform score of one.</p>
<p>The final combination will be a <code class="literal">constant_score</code> query which contains a <code class="literal">term</code> query:</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">GET /my_store/products/_search
{
    "query" : {
        "constant_score" : { <a id="CO42-1"></a><i class="conum" data-value="1"></i>
            "filter" : {
                "term" : { <a id="CO42-2"></a><i class="conum" data-value="2"></i>
                    "price" : 20
                }
            }
        }
    }
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_number.json"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO42-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>We use a <code class="literal">constant_score</code> to convert the <code class="literal">term</code> query into a filter</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO42-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">term</code> query that we saw previously.</p>
</td>
</tr>
</table>
</div>
<p>Once executed, the search results from this query are exactly what you would
expect: only document 2 is returned as a hit (because only <code class="literal">2</code> had a price
of <code class="literal">20</code>):</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">"hits" : [
    {
        "_index" : "my_store",
        "_type" :  "products",
        "_id" :    "2",
        "_score" : 1.0, <a id="CO43-1"></a><i class="conum" data-value="1"></i>
        "_source" : {
          "price" :     20,
          "productID" : "KDKE-B-9947-#kL5"
        }
    }
]</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO43-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>Queries placed inside the <code class="literal">filter</code> clause do not perform scoring or relevance,
so all results receive a neutral score of <code class="literal">1</code>.</p>
</td>
</tr>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_term_query_with_text"></a>term Query with Text<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/080_Structured_Search/05_term.asciidoc">edit</a>
</h3>
</div></div></div>
<p>As mentioned at the top of
this section, the <code class="literal">term</code> query can match strings
just as easily as numbers.  Instead of price, let’s try to find products that
have a certain UPC identification code. To do this with SQL, we might use a
query like this:</p>
<div class="pre_wrapper lang-sql">
<pre class="programlisting prettyprint lang-sql">SELECT product
FROM   products
WHERE  productID = "XHDK-A-1293-#fJ3"</pre>
</div>
<p>Translated into the query DSL, we can try a similar query with the <code class="literal">term</code>
filter, like so:</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">GET /my_store/products/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "productID" : "XHDK-A-1293-#fJ3"
                }
            }
        }
    }
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_text.json"></div>
<p>Except there is a little hiccup: we don’t get any results back!  Why is
that? The problem isn’t with the <code class="literal">term</code> query; it is with the way
the data has been indexed.  If we use the <code class="literal">analyze</code> API (<a class="xref" href="analysis-intro.html#analyze-api" title="Testing Analyzers">Testing Analyzers</a>), we
can see that our UPC has been tokenized into smaller tokens:</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">GET /my_store/_analyze
{
  "field": "productID",
  "text": "XHDK-A-1293-#fJ3"
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_text.json"></div>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">{
  "tokens" : [ {
    "token" :        "xhdk",
    "start_offset" : 0,
    "end_offset" :   4,
    "type" :         "&lt;ALPHANUM&gt;",
    "position" :     1
  }, {
    "token" :        "a",
    "start_offset" : 5,
    "end_offset" :   6,
    "type" :         "&lt;ALPHANUM&gt;",
    "position" :     2
  }, {
    "token" :        "1293",
    "start_offset" : 7,
    "end_offset" :   11,
    "type" :         "&lt;NUM&gt;",
    "position" :     3
  }, {
    "token" :        "fj3",
    "start_offset" : 13,
    "end_offset" :   16,
    "type" :         "&lt;ALPHANUM&gt;",
    "position" :     4
  } ]
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_text.json"></div>
<p>There are a few important points here:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
We have four distinct tokens instead of a single token representing the UPC.
</li>
<li class="listitem">
All letters have been lowercased.
</li>
<li class="listitem">
We lost the hyphen and the hash (<code class="literal">#</code>) sign.
</li>
</ul>
</div>
<p>So when our <code class="literal">term</code> query looks for the exact value <code class="literal">XHDK-A-1293-#fJ3</code>, it
doesn’t find anything, because that token does not exist in our inverted index.
Instead, there are the four tokens listed previously.</p>
<p>Obviously, this is not what we want to happen when dealing with identification
codes, or any kind of precise enumeration.</p>
<p>To prevent this from happening, we need to tell Elasticsearch that this field
contains an exact value by  setting it to be <code class="literal">not_analyzed</code>. We saw this
originally in <a class="xref" href="mapping-intro.html#custom-field-mappings" title="Customizing Field Mappings">Customizing Field Mappings</a>.  To do this, we need to first delete
our old index (because it has the incorrect mapping) and create a new one with
the correct mappings:</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">DELETE /my_store <a id="CO44-1"></a><i class="conum" data-value="1"></i>

PUT /my_store <a id="CO44-2"></a><i class="conum" data-value="2"></i>
{
    "mappings" : {
        "products" : {
            "properties" : {
                "productID" : {
                    "type" : "string",
                    "index" : "not_analyzed" <a id="CO44-3"></a><i class="conum" data-value="3"></i>
                }
            }
        }
    }

}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_text.json"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO44-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>Deleting the index first is required, since we cannot change mappings that
already exist.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO44-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>With the index deleted, we can re-create it with our custom mapping.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO44-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>Here we explicitly say that we don’t want <code class="literal">productID</code> to be analyzed.</p>
</td>
</tr>
</table>
</div>
<p>Now we can go ahead and reindex our documents:</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">POST /my_store/products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10, "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20, "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30, "productID" : "QQPX-R-3956-#aD8" }</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_text.json"></div>
<p>Only now will our <code class="literal">term</code> query work as expected.  Let’s try it again on the
newly indexed data (notice, the query and filter have not changed at all, just
how the data is mapped):</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">GET /my_store/products/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "productID" : "XHDK-A-1293-#fJ3"
                }
            }
        }
    }
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/080_Structured_Search/05_Term_text.json"></div>
<p>Since the <code class="literal">productID</code> field is not analyzed, and the <code class="literal">term</code> query performs no
analysis, the query finds the exact match and returns document 1 as a hit.
Success!</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_internal_filter_operation"></a>Internal Filter Operation<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/080_Structured_Search/05_term.asciidoc">edit</a>
</h3>
</div></div></div>
<p>Internally, Elasticsearch is
 performing several operations when executing a
non-scoring query:</p>
<div class="olist orderedlist">
<ol class="orderedlist">
<li class="listitem">
<p><em>Find matching docs</em>.</p>
<p>The <code class="literal">term</code> query looks up the term <code class="literal">XHDK-A-1293-#fJ3</code> in the inverted index
and retrieves the list of documents that contain that term.  In this case,
only document 1 has the term we are looking for.</p>
</li>
<li class="listitem">
<p><em>Build a bitset</em>.</p>
<p>The filter then builds a <em>bitset</em>--an array of 1s and 0s—​that
describes which documents contain the term.  Matching documents receive a  <code class="literal">1</code>
bit.  In our example, the bitset would be <code class="literal">[1,0,0,0]</code>.  Internally, this is represented
as a <a href="/blog/frame-of-reference-and-roaring-bitmaps" class="ulink" target="_top">"roaring bitmap"</a>,
which can efficiently encode both sparse and dense sets.</p>
</li>
<li class="listitem">
<p><em>Iterate over the bitset(s)</em></p>
<p>Once the bitsets are generated for each query, Elasticsearch iterates over the
bitsets to find the set of matching documents that satisfy all filtering criteria.
The order of execution is decided heuristically, but generally the most sparse
bitset is iterated on first (since it excludes the largest number of documents).</p>
</li>
<li class="listitem">
<p><em>Increment the usage counter</em>.</p>
<p>Elasticsearch can cache non-scoring queries for faster access, but it’s silly to
cache something that is used only rarely.  Non-scoring queries are already quite fast
due to the inverted index, so we only want to cache queries we <em>know</em> will be used
again in the future to prevent resource wastage.</p>
<p>To do this, Elasticsearch tracks the history of query usage on a per-index basis.
If a query is used more than a few times in the last 256 queries, it is cached
in memory.  And when the bitset is cached, caching is omitted on segments that have
fewer than 10,000 documents (or less than 3% of the total index size). These
small segments tend to disappear quickly anyway and it is a waste to associate a
cache with them.</p>
</li>
</ol>
</div>
<p>Although not quite true in reality (execution is a bit more complicated based on
how the query planner re-arranges things, and some heuristics based on query cost),
you can conceptually think of non-scoring queries as executing <em>before</em> the scoring
queries.  The job of non-scoring queries is to reduce the number of documents that
the more costly scoring queries need to evaluate, resulting in a faster search request.</p>
<p>By conceptually thinking of non-scoring queries as executing first, you’ll be
equipped to write efficient and fast search requests.</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="structured-search.html">« Structured Search</a>
</span>
<span class="next">
<a href="combining-filters.html">Combining Filters »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
